 <?PHP
require_once _DIRETORIO_BACKEND_._SEPARADOR_DIRETORIO_.'db.php';
require_once _DIRETORIO_BACKEND_VO_._SEPARADOR_DIRETORIO_.'VOpessoa.php';
require_once _DIRETORIO_BACKEND_DB_._SEPARADOR_DIRETORIO_.'Paginacao.php';
/**
* Esta Classe é responsável por inserir ou atualizar um registro de pesssoa.
* @name DBpessoa
* @version 0.1
* @access public
* @package DB
**/
abstract Class DBpessoa{
	/**
	 * Método responsável por retornar os dados. 
	 * @param int $idPessoa
	 * @access public
	 * @return oVO objeto do tipo pessoa
	 */
	public function getByID($idPessoa){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOpessoa();
            try{
                $sql = "SELECT * FROM PESSOA WHERE idPessoa =:idPessoa";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':idPessoa',$idPessoa,PDO::PARAM_INT);
                $stmt->execute();
                $oVO = $stmt->fetch(PDO::FETCH_OBJ);
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $oVO;
	}
       
    public function getUsuarioLogin($email,$senha){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOpessoa();
            try{
                $sql = "SELECT * FROM PESSOA WHERE email =:email AND senha =:senha";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':email',$email,PDO::PARAM_STR);
                $stmt->bindParam (':senha',$senha,PDO::PARAM_STR);
                $stmt->execute();
                $oVO = $stmt->fetch(PDO::FETCH_OBJ);
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $oVO;
	}
        
        public function select(){
            $DB = new DB();
            $dbh = $DB->conec();
            try {
                $sql = "SELECT * FROM PESSOA";
                $stmt = $dbh->prepare($sql);
                $stmt->execute();
                $pessoas = $stmt->fetchAll(PDO::FETCH_CLASS,"VOpessoa");
            } catch (PDOException $e) {
                $DB->DBerror($e, $sql);
            }
            return $pessoas;
        }
	/**
	 * Método responsável por montar um Sql de busca. 
	 * @param objeto $oVO 
	 * @param $pag 
	 * @access public
	 * @return resultado da Busca.
	 */
	public function get($oVO,$pag,$limitePagina){
            $DB = new DB();
            $dbh = $DB->conec();
            if(!isset($first)){$first = false;}
            try{
                $sql = "SELECT * FROM PESSOA WHERE idEmpresa =:idEmpresa";
                if(!empty($oVO->nome)){
                       $sql.=$this->getSQLFirst($first)."nome like :nome";
                }                    
                if(!empty($oVO->email)){
                       $sql.=$this->getSQLFirst($first)."email like :email";
                }
                if(!empty($oVO->status)){
                       $sql.=$this->getSQLFirst($first)."status =:status";
                }
                if(!empty($oVO->senha)){
                       $sql.=$this->getSQLFirst($first)."senha =:senha";
                }                
                if(!empty($oVO->idPerfil)){
                       $sql.=$this->getSQLFirst($first)."idPerfil =:idPerfil";
                }
                $sql.=" order by nome";

                if(isset($pag)){
                       $pg1 = ($limitePagina*($pag-1));
                       $sql.=" limit ".$pg1." , ".$limitePagina;
                }

                $stmt = $dbh->prepare($sql);
                
                $stmt->bindParam(':idEmpresa',$oVO->idEmpresa,PDO::PARAM_INT);
                if(!empty($oVO->nome)){
                       $oVO->nome = "%".$oVO->nome."%";
                       $stmt->bindParam(':nome',$oVO->nome,PDO::PARAM_STR);
                }
                if(!empty($oVO->email)){
                       $oVO->email = "%".$oVO->email."%";
                       $stmt->bindParam(':email',$oVO->email,PDO::PARAM_STR);
                }
                 if(!empty($oVO->status)){  
                       $oVO->status = "%".$oVO->status."%";
                       $stmt->bindParam(':status',$oVO->status,PDO::PARAM_STR);
                }
                if(!empty($oVO->senha)){
                       $oVO->senha = "%".$oVO->senha."%";
                       $stmt->bindParam(':senha',$oVO->senha,PDO::PARAM_STR);
                }
                if(!empty($oVO->idPerfil)){
                       $stmt->bindParam(':idPerfil',$oVO->idPerfil,PDO::PARAM_INT);
                }                
                $stmt->execute();
                $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOpessoa");
            }
            catch (PDOException $e){
                     $DB->DBerror($e, $sql);
            }
            return $result;
	}
	
  	/**
	 * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
	 * @param boolean $first 
	 * @access public
	 * @return Where ou AND.
	 */
	public function getSqlFirst(&$first){
	    $return = " AND ";
	    if($first){$return=" WHERE ";$first=true;}
	    return($return);
	}
	
   	/**
	 * Método responsável por inserir ou atulizar um registro. 
	 * @param objeto $oVO 
	 * @access public
	 */	
	public function save($oVO){		
            $DB = new DB();
            $dbh = $DB->conec();
            if($oVO->idPessoa > 0){
                $sql = "UPDATE PESSOA SET 
                               idEmpresa =:idEmpresa
                               ,nome =:nome
                               ,email =:email
                               ,status =:status
                               ,senha =:senha 
                               ,idPerfil =:idPerfil
                         WHERE idPessoa =:idPessoa";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam(':idPessoa',$oVO->idPessoa,PDO::PARAM_INT);
            } else {
                $sql = "INSERT INTO PESSOA 
                                   (nome		               
                                   ,email
                                   ,status
                                   ,senha
                                   ,idEmpresa
                                   ,idPerfil)
                             VALUES
                                   (:nome
                                   ,:email
                                   ,:status
                                   ,:senha
                                   ,:idEmpresa
                                   ,:idPerfil)";         
                 $stmt = $dbh->prepare($sql);
            }
            $stmt->bindParam(':nome',mb_convert_encoding($oVO->nome, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':email',mb_convert_encoding($oVO->email, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':status',mb_convert_encoding($oVO->status, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':senha',mb_convert_encoding($oVO->senha, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->bindParam(':idEmpresa',$oVO->idEmpresa,PDO::PARAM_INT);
            $stmt->bindParam(':idPerfil',$oVO->idPerfil,PDO::PARAM_INT);
            $stmt->execute();
	}
		
	/**
	 * Método responsável por deletar um registro. 
	 * @param int $idPessoa
	 * @access public
	 */
	public function delete($idPessoa){			
            $DB = new DB();
            $dbh = $DB->conec();
            $sql = "DELETE FROM PESSOA WHERE idPessoa=:idPessoa";
            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idPessoa',$idPessoa,PDO::PARAM_INT);
            $stmt->execute();
	}

}
